#!/bin/bash

:<<!
  @create_by: Mr.Zhang
  @create_time: 2025-08-08 08:08
  @description: mysql 数据库备份
!

# mysql 用户名
# read -p "请输入 mysql 用户名：" username
username=root

# mysql 密码，静默输入
# read -sp "请输入 mysql 密码：" password
password=xinrun0928..

printf "\n"

# 校验输入的字符是否为空串
if [ -z $username -o -z $password ]; then
  echo "用户名或密码为空，请重试！"
  exit 2
fi

# 备份路径
back_path=./mysql/$(date +%Y%m%d)

# 判断路径是否存在，不存在则新键
[ ! -d $back_path ] && mkdir -p $back_path

# 连接 mysql 命令
connection_command="mysql -u${username} -p${password}"

# 尝试连接
try_connection_result=`${connection_command} -e "select 1" 2>/dev/null | sed 1d`

# 判断是否能连接得上
if [[ -z $try_connection_result || $try_connection_result != 1 ]]; then
        echo "mysql 用户名或密码错误！"
        exit 2
fi

# 备份数据库命令
dump_command="mysqldump -u$username -p$password"

# 获取当前连接下的所有除系统的数据库列表
database_list=`$connection_command -e "show databases;" 2>/dev/null | sed 1d | egrep -v "_schema|mysql|sys"`

echo "获取到需要备份的数据库列表："
echo $database_list

echo "开始备份："
echo "--------------------------------------------------"

# 计数器
count=0

# 遍历所有数据库进行备份操作
for db_name in $database_list
do
        let count++
        printf '正在备份第 %s 个数据库文件：%s ---> ' ${count} ${db_name}
        # 备份对应数据库名称格式：“数据库名称” + “时间格式”
        # 最后压缩成：.gz 结尾的压缩文件
        $dump_command $db_name 2>/dev/null | gzip > ${back_path}/${db_name}_$(date +%m%d).sql.gz
        printf '备份 %s 数据库完成！\n' ${db_name}
done

echo "--------------------------------------------------"
echo "总数：${count}，备份全部数据库完成！"
